レプリケーション replication
ネットワークで接続された複数のマシンに同じデータのコピーを保持しておくこと
目的
地理的に近いデータを保持する
読み取りを分離しスケールアウトさせる
変更のアルゴリズム
シングルリーダー
マルチリーダー
リーダーレス
データのコピーを保持する各ノード
いわゆるmaster/slave
同期型と非同期型
同期型
フォロワーが最新のデータを持っておりリーダーとの一貫性が保証されている
フォロワーが利用不可能だとリーダーの書き込みをブロックする
なのですべてを同期にするのは現実的ではない
通常は1つだけ同期でほかは非同期
RDS for MySQLとかはこれ
MySQLの準同期レブリケーションと紛らわしいね
非同期型
レプリケーションラグ
自分の書き込みが読み込んだときに反映されてることを保証する一貫性
他人の書き込みには興味がない
実装
自分しか更新しないデータ(プロフィールとか)の場合はリーダーから読み取る
...
自分が複数いる場合(ブラウザとアプリとか)はさらに考慮事項が増える
複数のレプリカから読み取りを行う場合過去に遡って情報が見えてしまう
モノトニックな読み取りは時間が巻き戻ることはないことを保証する
ある順序で書き込まれた場合、それを読み取る人は必ず同じ順序で見えることを保証する
パーティショニングしたとき問題になる
チェーンレプリケーション